﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Mvc;
using Microsoft.Reporting.WebForms;
using ActionTrackerEntities;

namespace ActionTrackerWeb.Controllers
{
    public class ReportController : Controller
    {
        //
        // GET: /Report/
        private IList<Stream> m_streams;

        public FileResult EmitirReporteAccionesVencidas(string nombreReporte, string nombreDataSet)
        {
            var parametros = (List<ReportParameter>)Session["Parametros"];
            var listadoDatos = (List<ReporteAccionesVencidas>)Session["ReporteAccionesVencidas"];
            return GetFile<ReporteAccionesVencidas>(nombreReporte, parametros, listadoDatos, nombreDataSet);
        }

        public FileResult EmitirMetricaPromedio(string nombreReporte, string nombreDataSet)
        {
            var parametros = (List<ReportParameter>)Session["Parametros"];
            var listadoDatos = (List<MetricaPromedio>)Session["MetricaPromedio"];
            return GetFile<MetricaPromedio>(nombreReporte, parametros, listadoDatos, nombreDataSet);
        }

        public FileResult EmitirMetricaCantidad(string nombreReporte, string nombreDataSet)
        {
            var parametros = (List<ReportParameter>)Session["Parametros"];
            var listadoDatos = (List<MetricaCantidad>)Session["MetricaCantidad"];
            return GetFile<MetricaCantidad>(nombreReporte, parametros, listadoDatos, nombreDataSet);
        }

        public FileResult GetFile<TModel>(string nombreReporte, List<ReportParameter> parametros, List<TModel> listadoDatos, string nombreDataSet) //este baja el PDF
        {
            
            ReportViewer rv = new ReportViewer();
            rv.ProcessingMode = ProcessingMode.Local;
            rv.LocalReport.ReportPath = Server.MapPath("~/Reportes/"+ nombreReporte +".rdlc");
            rv.LocalReport.DataSources.Clear();
            rv.LocalReport.DataSources.Add(new ReportDataSource(nombreDataSet, listadoDatos));
            rv.LocalReport.SetParameters(parametros);
            rv.LocalReport.Refresh();
            //string deviceInfo =
            //    "<DeviceInfo>" +
            //    "  <OutputFormat>EMF</OutputFormat>" +
            //    "  <PageWidth>8.5in</PageWidth>" +
            //    "  <PageHeight>11in</PageHeight>" +
            //    "  <MarginTop>0.25in</MarginTop>" +
            //    "  <MarginLeft>0.25in</MarginLeft>" +
            //    "  <MarginRight>0.25in</MarginRight>" +
            //    "  <MarginBottom>0.25in</MarginBottom>" +
            //    "</DeviceInfo>";

            byte[] streamBytes = null;
            string mimeType = "";
            string encoding = "";
            string filenameExtension = "";
            string[] streamids = null;
            Warning[] warnings = null;
            var listP = rv.LocalReport.GetParameters();
            
            m_streams = new List<Stream>();

            //rv.LocalReport.Render("Image", deviceInfo, _CreateStream, out warnings);
            //foreach (Stream stream in m_streams)
            //    stream.Position = 0;

            streamBytes = rv.LocalReport.Render("PDF", null, out mimeType, out encoding, out filenameExtension, out streamids, out warnings);
            //FileStream fs = new FileStream("~/Reportes/TempArchivos" + nombreReporte + ".pdf", FileMode.Create);
            //fs.Write(streamBytes, 0, streamBytes.Length);
            //fs.Close();
            return File(streamBytes, mimeType, nombreReporte + "_" + DateTime.Now.ToString("dd/MM/yyyy") + ".pdf"); //.xls");
        }
    }
}
